// const target = {
//   foo: 'bar',
//   baz: 'qux',
//   sayHello() {
//     console.log('hello');
//   }
// }

// const proxy = new Proxy(target, {

// })

// proxy.sayHello()
// 处理程序对象
// const handler = {
// get(targetObj, prop, proxyObj) {
//   // console.log(targetObj === target);
//   // console.log(proxyObj === proxy);
//   // return targetObj[prop]
//   return Reflect.get(...arguments)
// }
// get: Reflect.get
// get(targetObj, prop, proxyObj) {
//   let decoration = ''
//   if (prop === 'foo') {
//     decoration = 'cuifan'
//   }
//   return Reflect.get(...arguments) + decoration
// }
//   get() {
//     return 'cuifan'
//   }
// }
// const proxy = new Proxy(target, handler)

// console.log(Reflect.get(target, 'foo', proxy));
// console.log(proxy.foo);
// console.log(target.foo);

// 处理程序对象
// const handler = {
//   get() {
//     return 'cuifan'
//   }
// }

// // 创建代理和撤销代理函数
// const {
//   proxy,
//   revoke
// } = Proxy.revocable(target, handler)


// console.log(proxy.foo);
// console.log(target.foo);

// revoke()

// console.log(proxy.foo);
// let uname = 'erqi'
// let obj = {
//   sayHello() {
//     console.log(this);
//   },
//   uname: 'erqi'
// }

// let obj1 = {
//   uname: 'dddd'
// }

// obj.sayHello.apply('cuifanfan')

// function Person(name, age) {
//   this.name = name
//   this.age = age
// }

// Function.prototype.construct = function(args) {

// }

// const wm = new WeakMap() // 弱映射

// class User {
//   constructor(userId) {
//     wm.set(this, userId)
//   }

//   set id(userId) {
//     wm.set(this, userId)
//   }

//   get id() {
//     return wm.get(this)
//   }
// }

const target = {
  foo: 'bar',
  sayHello() {
    console.log('hello');
  }
}

// 处理程序对象
let handler = {
  get() {
    return 'cuifan'
  },
}

let proxy = new Proxy(target, handler)
  // console.log(target.foo);
console.log(proxy.foo);
console.log(Reflect.get(proxy, 'foo'));